package com.rest.handler;

import com.rest.exception.RRException;
import com.rest.model.R;
import org.springframework.http.HttpStatus;
import org.springframework.ui.Model;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;

/**
 * @author 王战伟
 * @email mrwangzhanwei@163.com
 * @date 2021/3/16  15:08
 * ///////////////////////////////////////////////////////////////////
 * //                          _ooOoo_                               //
 * //                         o8888888o                              //
 * //                         88" . "88                              //
 * //                         (| ^_^ |)                              //
 * //                         O\  =  /O                              //
 * //                      ____/`---'\____                           //
 * //                    .'  \\|     |//  `.                         //
 * //                   /  \\|||  :  |||//  \                        //
 * //                  /  _||||| -:- |||||-  \                       //
 * //                  |   | \\\  -  /// |   |                       //
 * //                  | \_|  ''\---/''  |   |                       //
 * //                  \  .-\__  `-`  ___/-. /                       //
 * //                ___`. .'  /--.--\  `. . ___                     //
 * //              ."" '<  `.___\_<|>_/___.'  >'"".                  //
 * //            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
 * //            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
 * //      ========`-.____`-.___\_____/___.-`____.-'========         //
 * //                           `=---='                              //
 * //      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
 * //            佛祖保佑       永不宕机     永无BUG                   //
 * ////////////////////////////////////////////////////////////////////
 * @ControllerAdvice + @ExceptionHandle可以处理 除 404 以外的 运行异常，那么，捕获不到的异常就是404了。
 */
@RestControllerAdvice
public class GlobalExceptionHandler {


    /**
     * 全局异常处理
     * @param request
     * @param e
     * @return
     */
    @ExceptionHandler(value = {RRException.class})
    @ResponseBody
    public R rrExceptionHandler(HttpServletRequest request, RRException e){
        return R.error(e.getCode(),e.getMsg());
    }

    /**
     * 全局异常处理
     * @param request
     * @param e
     * @return
     */
    @ExceptionHandler(value = {IllegalArgumentException.class})
    @ResponseBody
    public R rrExceptionHandler(HttpServletRequest request, IllegalArgumentException e){
        return R.error(e.getMessage());
    }


}
